#include <unistd.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>

char *const addenv[] = {
    (char *const)"MYVAL=123456789",
    (char *const)"MYVAL1=123456789",
    (char *const)"MYVAL2=123456789",
    NULL
};

int main()
{
    printf("我的程序要运行了!\n");

    if(fork() == 0)
    {
        printf("I am Child, My Pid Is: %d\n", getpid());
        sleep(1);

        char *const argv[] = {
            (char*const)"other",
            (char*const)"-a",
            (char*const)"-b",
            (char*const)"-c",
            (char*const)"-d",
            NULL
        };

        for(int i = 0; addenv[i]; i++) // 
        {
            putenv(addenv[i]);
        }
        
        extern char **environ;
        execvpe("./other", argv, environ);
        
        exit(1);
    }
    
    waitpid(-1, NULL, 0);
    printf("进程结束\n");
    return 0;
}

//int main() 
//{
//    printf("程序开始运行\n");
//    
//    if(fork() == 0)
//    {
//        printf("I am Child, My Pid Is: %d\n", getpid());
//        sleep(1);
//
//        char *const argv[] = {
//            (char*const)"other",
//            (char*const)"-a",
//            (char*const)"-b",
//            (char*const)"-c",
//            (char*const)"-d",
//            NULL
//        };
//
//
//		char* const env[] = {
//            (char* const) "MYVAL=12345667",
//            NULL
//        };
//       
//        execvpe("./other", argv, env);
//        
//        exit(1);
//    }
//    
//    waitpid(-1, NULL, 0);
//    printf("进程结束\n");
//    return 0;
//}

//int main()
//{
//    char *const argv[] = {"ls", "-l", "/home", NULL};
//
//    execvp("ls", argv);
//
//    return 1;
//}

//int main()
//{
//    char *const argv[] = {"ls", "-l", "/home", NULL};
//    execv("/bin/ls", argv);
//    perror("execv failed");
//
//    return 1;
//}

//int main()
//{
//    execlp("ls", "ls", "/home", (char*)NULL);
//
//    perror("execlp failed");
//
//    return 0;
//}

//
//int main() {
//    // 参数列表：程序名"ls"，参数"-l"、"/home"，结尾NULL
//    execl("/bin/ls", "ls", "-l", "/home", (char*)NULL);
//    // 若execl失败才会执行以下代码
//    perror("execl failed");
//    return 1;
//}
